1

Python MySQLdb模块

安装

系统:Ubuntu 14.04
MySQLdb
$ pip install Mysql-python
-> 报错:EnvironmentError: mysql_config not found (安装libmysqlclient-dev)
$ apt-get install libmysqlclient-dev
$ pip install Mysql-python

如果是MAC系统,则需要先安装 mysql 服务。

使用

  • 查数据示例(fetchall()获取数据
import MySQLdb

# 建立连接
conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')

# 设置游标
cur = conn.cursor()

# 执行SQL命令,并不会直接返回查询结果,而是返回SQL语句影响的行数
reCount = cur.execute('select * from Products;')
print reCount        # 输出一个数字,是SQL影响的行数

# 使用 fetchall()方法获取数据,循环输出结果,以元祖的方式输出
for data in cur.fetchall():
    print data
    
# 关闭连接
cur.close()
conn.close()
# 结果==》
5
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')
('000004', 'TYA')
('000005', 'TUH')
  • 插入或者更改数据
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()

# 定义SQL语句
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 定义数据
params = ('00002', 'GLA')
reCount = cur.execute(sql, params)        #为了防止SQL注入,可以使用该方法
conn.commit()   #提交

cur.close()
conn.close()
  • 批量插入数据
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()

# 要批量插入的数据
li = [
    ('000004', 'TYA'),
    ('000005', 'TUH')
]
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 批量使用executemany
reCount = cur.executemany(sql, li)        #为了防止SQL注入,可以使用该方法
conn.commit()   #提交

cur.close()
conn.close()
  • 之前查看数据时,返回是元祖形式,有时看起来并不明显,我们可以选择用字典的方式,将列名一起输出。
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')

# 使用字典形式返回数据
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

# 执行命令,并不会直接打印,可以使用fetchall来读取。
reCount1 = cur.execute('select * from Products')

print reCount1        # 输出一个数字,是SQL影响的行数
for data in cur.fetchall():
    print data
cur.close()
conn.close()
# 结果==》
5
{'prod_name': 'hilife', 'prod_id': '00001'}
{'prod_name': 'GLA', 'prod_id': '00002'}
{'prod_name': 'GTL', 'prod_id': '00003'}
{'prod_name': 'TYA', 'prod_id': '000004'}
{'prod_name': 'TUH', 'prod_id': '000005'}

cursor读取执行结果的方法有:

  • fetchall() 把所有的都读出来
  • fetchmany(n) 输出指定数量n的行
  • fetchone() 只返回第一条结果
  • fetchone() 一次只返回一条结果,下次返回第二条,和文件的readlines类似

对应的也会有指针的概念,scroll()可以指定读取的位置

cur.scroll(0, mode='absolute')    # 绝对指针, 0 就是指针的位置
cur.scroll(-1, mode='relative')    # 相对指针, -1 指针位置向前移一位(指针位置-1)
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')
cur = conn.cursor()

reCount = cur.execute('select * from Products;')

# 使用 fetchone()方法获取数据
data = cur.fetchone()
print data
data = cur.fetchone()
print data
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')

# 使用绝对指针时
...
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(0, mode='absolute')    # 将指针指向 0
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00001', 'hilife')

# 使用相对指针
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(-1, mode='relative')    # 指针位置减1
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00002', 'GTL')
  • cur.lastrawid() 获取自增id

Satezheng
7 声望0 粉丝

« 上一篇
Python Execl模块